package modelo.configuraciones;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import modelo.ladron.Ladron;
import modelo.ladron.caracteristicas.Cabello;
import modelo.ladron.caracteristicas.Hobby;
import modelo.ladron.caracteristicas.PerfilLadron;
import modelo.ladron.caracteristicas.Senia;
import modelo.ladron.caracteristicas.Sexo;
import modelo.ladron.caracteristicas.Vehiculo;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;


public class LectorLadronesXML implements FuenteDeLadrones{
	
	private static LectorLadronesXML instancia= null;
	
	private synchronized static void crearInstancia(){
		if (instancia == null ) {
			instancia = new LectorLadronesXML();
		}
	}
	public static LectorLadronesXML obtenerInstancia(){
		if (instancia == null){
			crearInstancia();
		}
		return instancia;
	}
	
	public List<Ladron> obtenerLadrones(File input) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(input);
        List<Ladron> ladrones = new ArrayList<Ladron>();
        List<?> list = document.selectNodes("//Ladrones/Ladron");
        Iterator<?> i = list.iterator();
        while(i.hasNext()){
        	Element element = (Element)i.next();
        	Iterator<?> j = element.elementIterator("Nombre");
        	String nombre="", sexo="", hobby="", cabello="", senia="", vehiculo="";
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		nombre=titleElement.getText();
        	}
        	j = element.elementIterator("Sexo");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		sexo=titleElement.getText();
        	}
        	j = element.elementIterator("Hobby");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		hobby=titleElement.getText();
        	}
        	j = element.elementIterator("Cabello");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		cabello=titleElement.getText();
        	}
        	j = element.elementIterator("Senia");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		senia=titleElement.getText();
        	}
        	j = element.elementIterator("Vehiculo");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		vehiculo=titleElement.getText();
        	}
        	PerfilLadron perfil = new PerfilLadron(nombre, Sexo.valueOf(sexo), Hobby.valueOf(hobby), Cabello.valueOf(cabello), Senia.valueOf(senia), Vehiculo.valueOf(vehiculo));
        	ladrones.add(new Ladron(perfil));
        }
        return ladrones;
    }
}